/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.vista.implementaciones;

import desarrollosoft.ghce.entidades.AntecedenteNoPatologico;
import desarrollosoft.ghce.entidades.Aspecto;
import desarrollosoft.ghce.entidades.Paciente;
import desarrollosoft.ghce.servicio.interfaces.IParserExcepciones;
import desarrollosoft.ghce.servicio.interfaces.IServicioAntecedentes;
import desarrollosoft.ghce.vista.interfaces.Avisable;
import desarrollosoft.ghce.vista.interfaces.Estado;
import java.util.Date;
import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Messagebox;

/**
 *
 * @author ariel
 */
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class ControladoraVentanaDetallesAntecedenteNoPatologico {
    
    @WireVariable("servicioAntecedentes")
    private IServicioAntecedentes servicioAntecedentes;
    
    @WireVariable("parserExcepcionesAntecedenteNoPatologico")
    private IParserExcepciones parserExcepcionesAntecedenteNoPatologico;
    
    private Paciente paciente; 
    private AntecedenteNoPatologico antecedente;
    private Estado estado;
    private Avisable avisable;
    private Aspecto aspecto;
    
    private AntecedenteNoPatologico antecedenteAnterior;
    
    private boolean camposSoloLectura;
    
    @Init
    public void inicializar() {
        Execution ejecucion = Executions.getCurrent();
        paciente = (Paciente) ejecucion.getArg().get("paciente");
        antecedente = (AntecedenteNoPatologico) ejecucion.getArg().get("antecedenteNoPatologico");
        estado = (Estado) ejecucion.getArg().get("estado");
        avisable = (Avisable) ejecucion.getArg().get("avisable");
        aspecto = (Aspecto) ejecucion.getArg().get("aspecto");
        
        switch (estado) {
            case CONSULTANDO:
                camposSoloLectura = true;
                break;
            case CREANDO:
                antecedente = new AntecedenteNoPatologico();
                antecedente.setPaciente(paciente);
                antecedente.setAspecto(aspecto);
                camposSoloLectura = false;
                break;
            case MODIFICANDO:
                camposSoloLectura = false;
                antecedenteAnterior = antecedente.clonar();
                break;
        }
    }
    
    @Command("guardar")
    public void clickBotonGuardar() {
        // seteo la fecha de ultima modificacion como hoy
        antecedente.setFechaUltimaModificacion(new Date());
        
        switch (estado) {
            case CREANDO:
                try {
                    servicioAntecedentes.crearAntecedenteNoPatologico(antecedente);
                    camposSoloLectura = false;
                } catch (Exception ex) {
                    Messagebox.show(parserExcepcionesAntecedenteNoPatologico.parsear(ex.toString()));
                    return;
                }
                avisable.seCerroVentanaHija(null); // aviso para que actualicen el master si salio OK
                break;
            case MODIFICANDO:
                try {
                    servicioAntecedentes.modificarAntecedenteNoPatologico(antecedente);
                    camposSoloLectura = false;
                } catch (Exception ex) {
                    Messagebox.show(parserExcepcionesAntecedenteNoPatologico.parsear(ex.toString()));
                    return;
                }
                avisable.seCerroVentanaHija(null); // aviso para que actualicen el master si salio OK
                break;
        }
    }
    
    @Command("cancelar")
    public void clickBotonCancelar() {
        switch (estado) {
            case CREANDO:
                antecedente = new AntecedenteNoPatologico();
                camposSoloLectura = true;
                //avisable.seCerroVentanaHija(null); // aviso
                break;
            case MODIFICANDO:
                antecedente = antecedenteAnterior;
                camposSoloLectura = true;
                break;
        }
        BindUtils.postNotifyChange(null, null, this, "*");
    }
    
    public boolean getCamposSoloLectura() {
        return camposSoloLectura;
    }
    
    public AntecedenteNoPatologico getAntecedente() {
        return antecedente;
    }
}
